package com.ky.user.service.impl;

import cn.hutool.core.util.IdUtil;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ky.common.config.RabbitKeyConfig;
import com.ky.common.param.MqMsg;
import com.ky.common.vo.R;
import com.ky.user.entity.User;
import com.ky.user.entity.SmsLog;
import com.ky.user.mapper.SmsLogMapper;
import com.ky.user.mapper.UserMapper;
import com.ky.user.service.SmsLogService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;


/**
     * <p>
     *  服务实现类
     * </p>
     *
     * @author wgz
     * @since 2024-06-17
     */
    @Service
    public class SmsLogServiceImpl extends ServiceImpl<SmsLogMapper, SmsLog> implements SmsLogService {


        @Autowired
        private RabbitTemplate rabbitTemplate;

        @Autowired
        private UserMapper userMapper;
        /**
         *
         * 1校验手机号是否为空
         * 2.校验手机号 是否被其他用户使用
         * 3.发送手机验证码
         * 4.返回数据 验证已发送，请查收
         * @param phone
         * @return
         */
        @Override
        public R sendRegisterCode(String phone) {

//        1校验手机号是否为空
            if (StringUtils.isEmpty(phone)){
                return R.fail("手机号为空");
            }

//        2.校验手机号 是否被其他用户使用

            List<User> userList = userMapper.selectByPhone(phone);
//        QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
//        userQueryWrapper.eq("phone",phone);

//        List<User> userList = userMapper.selectList(userQueryWrapper);

            if (userList!=null && userList.size()>0){
                return R.fail("该手机号已注册");
            }

            // 3.发送手机验证码
            rabbitTemplate.convertAndSend("",
                    RabbitKeyConfig.Q_SENDSMS,new MqMsg(IdUtil.getSnowflakeNextId(),1,phone));


            // 4.返回数据 验证已发送，请查收

            return R.ok("验证已发送，请查收");
        }
    /**
     * 1.判断参数是否为空
     *
     * 2.判断当前手机号 对应账户是否存在
     *
     * 3.发送登录验证码消息队列  类型2
     *
     * 4.返回 前端验证码已发送
     * @param phone
     * @return
     */
    @Override
    public R sendLoginCode(String phone) {
        // * 1校验手机号是否为空
        if(StringUtils.isEmpty(phone)){
            return R.fail("手机号为空");
        }
        // 2.判断当前手机号 对应账户是否存在

        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("phone",phone);
        List<User> users = userMapper.selectList(queryWrapper);
        if (users==null||users.size()==0){
            return R.fail("手机号不存在");
        }
        // 3.发送登录验证码消息队列  类型2
        rabbitTemplate.convertAndSend("",RabbitKeyConfig.Q_SENDSMS,new MqMsg(IdUtil.getSnowflakeNextId(),2,phone));
        //4.返回 前端验证码已发送
        return R.ok("登录验证码已发送，请查收");
    }
    }


